Win32: Add EGLDisplay getter
authorChun-wei Fan <fanchunwei@src.gnome.org>
Wed, 12 May 2021 11:29:05 +0000 (19:29 +0800)
committerChun-wei Fan <fanchunwei@src.gnome.org>
Wed, 12 May 2021 14:16:56 +0000 (22:16 +0800)
Like what was done for Wayland and X11, add an API to retrieve the EGLDisplay
if one is being used in place of WGL.

gdk/win32/gdkglcontext-win32.c
gdk/win32/gdkwin32display.h

index 610711d3b89d1594e67578d30a5e32a8fad32f63..e81ae5338a6d2175a3e0e24f7e810623e67141e2 100644 (file)
@@ -424,7 +424,6 @@ static EGLDisplay
 _gdk_win32_get_egl_display (GdkWin32Display *display)
 {
   EGLDisplay disp;
-  gboolean success = FALSE;
 
   if (epoxy_has_egl_extension (NULL, "EGL_EXT_platform_base"))
     {
@@ -555,6 +554,37 @@ _gdk_win32_display_init_gl (GdkDisplay *display)
   return TRUE;
 }
 
+/**
+ * gdk_win32_display_get_egl_display:
+ * @display: (type GdkWin32Display): a Win32 display
+ *
+ * Retrieves the EGL display connection object for the given GDK display.
+ *
+ * Returns: (nullable): the EGL display
+ */
+gpointer
+gdk_win32_display_get_egl_display (GdkDisplay *display)
+{
+  GdkWin32Display *display_win32;
+
+  g_return_val_if_fail (GDK_IS_WIN32_DISPLAY (display), NULL);
+
+#ifdef GDK_WIN32_ENABLE_EGL
+  if (!_gdk_win32_display_init_gl (display))
+    return NULL;
+
+  display_win32 = GDK_WIN32_DISPLAY (display);
+
+  if (display_win32->have_wgl)
+    return NULL;
+
+  return display_win32->egl_disp;
+#else
+  /* no EGL support */
+  return NULL;
+#endif
+}
+
 /* Setup the legacy context after creating it */
 static gboolean
 _ensure_legacy_gl_context (HDC           hdc,
index a91fe3e49dadfae4965c0329ed20499df9b7812d..e9e621eba595e0de3d5b55b2298a9a63d84ae470 100644 (file)
@@ -104,6 +104,9 @@ void       gdk_win32_display_remove_filter       (GdkWin32Display
 GDK_AVAILABLE_IN_ALL
 GdkMonitor * gdk_win32_display_get_primary_monitor (GdkDisplay *display);
 
+GDK_AVAILABLE_IN_4_4
+gpointer gdk_win32_display_get_egl_display         (GdkDisplay  *display);
+
 
 G_END_DECLS